package com.itheima.controller;

import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 部门管理
 */
//相当于下面的Logger对象
@Slf4j
@RestController
@RequestMapping("/depts")
public class DeptController {

    /**
     * @Slf4j
     * 加上Slf4j注解，就可以省去这个日志对象，直接调用log方法
     * slf4j下的Logger
     * private static Logger log = LoggerFactory.getLogger(DeptController.class);
     */

    /*
        这段语法其实就相当于@GetMapping
        @RequestMapping(value = "/depts",method = RequestMethod.GET)//指定请求方式为GET
     */

            //注入
    @Autowired
    private DeptService deptService;


    @GetMapping
    public Result list() {
        log.info("查询全部部门数据");
        //调用service来查询部门数据
        List<Dept> deptList = deptService.list();
        return Result.success(deptList);
    }

    /**
     * @PathVariable是参数格式
     * 删除部门
     */

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id){
        log.info("根据id删除部门：{}",id);
        //调用service来删除部门
        deptService.delete(id);
        return Result.success();
    }

    /**
     * 新增部门
     * @return
     */
    @PostMapping
    public Result add(@RequestBody Dept dept){
        /**
         * 1.生成方法
         * 2.注解，请求路径
         * 3.添加参数
         * （页面传过来的属性是json格式的，我们需要把它封装到实体类当中。就使用dept实体类来封装）
         * 4.json格式要想封装到这个对象当中，就需要在前面加上一个注解：@RequsetBody
         */
        log.info("新增部门：{}",dept);//dept可以替换掉{}这个占位符
        //调用service中的方法来完成新增部门的操作
        deptService.add(dept);
        return Result.success();
    }

    /**
     * 根据id查询部门数据
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result queryById(@PathVariable Integer id){
        log.info("根据id查询部门：{}",id);
        //调用service中的方法来完成查询部门的操作
//        deptService.queryById(id);//这里错了，需要把传过来的数据赋给一个对象，然后输出这个对象
        Dept dept = deptService.queryById(id);

//        return Result.success();//这里错了
        //返回的时候需要把查询的东西返回
        return Result.success(dept);
    }

    /**
     * 获取id后通过id修改内容
     *
     */
    @PutMapping
    public Result update(@RequestBody Dept dept){
        log.info("修改部门：{}",dept);
        //更新操作不需要返回数据
        deptService.update(dept);
        return Result.success();
    }

}
